/*
 * 文件名：FeedBackController.java
 * 版权：Copyright 2012-2016 广州宝锶信息技术有限公司
 * 创建人：曾毅
 * 创建时间：2017年8月25日 上午10:55:22
 * 修改人：
 * 修改时间：
 * 修改内容：
 */
package com.baothink.weichat.controller;

import java.io.InputStream;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.baothink.weichat.dto.base.FeedBackEventBaseDto;
import com.baothink.weichat.dto.common.FeedBackDto;
import com.baothink.weichat.handler.FeedBackResultHandler;
import com.baothink.weichat.security.WechatSecurity;
import com.baothink.weichat.utils.IoUtil;
import com.baothink.weichat.utils.StringUtil;

/**
 * TODO<一句话功能描述><br>
 * TODO<功能详细描述><br>
 * 
 * @author 曾毅
 * @version 1.0,2017年8月25日 上午10:55:22
 * @since weichat 0.0.1
 */
@Controller
@RequestMapping("/wechat")
public class FeedBackController {
	private Logger log = LoggerFactory.getLogger(getClass());
	
	@RequestMapping(value="/feedback")
	@ResponseBody
	public Object feedBack(FeedBackDto dto,HttpServletRequest request){
		WechatSecurity security = new WechatSecurity();
		String echostr = null;
		try(InputStream is = request.getInputStream()){
			log.info(dto.toString());
			if(null!=dto){
				//检验URl阶段
				if(!StringUtil.isEmptyOrNull(dto.getEchostr())){
					echostr = security.verifyURL(dto);
				}
				//回调阶段
				else{
					String postBody = IoUtil.getPostBody(is);
					log.debug(String.format("callback receive request body --> %s ", postBody));
					
					String resultXmlStr = security.DecryptMsg(dto.getMsg_signature(), dto.getTimestamp(), dto.getNonce(), postBody);
					log.debug(resultXmlStr);
					
					FeedBackEventBaseDto resultDto = FeedBackResultHandler.handlerResult(resultXmlStr);
					
					return resultDto;
				}
			}
		} catch (Exception e) {
			log.error(e.getMessage(),e);
		}
		return echostr;
	}
}
